Skip to content
# 灰度流程

1. 确定涉及哪些后端、前端工程、gm_task 改动、定时脚本改动

    前端:station, more, manage
    后端:gm_management, gm_service, gm_web_stock, gm_server_order

    注意:新加用户时候需要切换 node.js 流量(温家锦操作)

    gm_task、定时脚本:无

2. 从 develop 分支中切出 release/YYYYMMDD 分支
3. 灰度一个不存在的 group id
4. 部署 gm_task
   1. clone 新的 gm_task 分支
   2. 部署 web 服务分支
   3. 修改 gm_task 分支配置
   3. 修改 gm_task 队列配置(gm_task_queue)
   4. 使用 tmux 启动服务
   5. 修改 web 服务的配置,改动 queue_name
5. 部署 gm_script
6. 灰度账号(先灰度测试账号,再灰度真实客户)
   1. 刷数据(切流量前需要刷的脚本)
   2. 修改 gm_task 脚本中的 group ids
   2. 修改 gm_script 脚本中的 group ids
   3. 使用发布脚本灰度账号
   4. 刷数据(切流量后需要刷的脚本)
   5. 等待测试测试(仅灰度测试账号时需要)
   6. 在钉钉群里通知

# 全量流程

1. 查看之前灰度的ID

    gmdeploy list -p 模块名称
    gmdeploy prerelease -u name ID # 在全量机器部署分支服务,

2. 合 master 代码

    到所有模块git目录里面, 将所有模块master内容合并到release分支

        git checkout master
        git pull
        git checkout release/20190715
        git merge master
        git push

    回到脚本中yes确认完成

3. 跟前端确认分支是否要进行rebase到master,等他们操作完成

    注意:需要切换 node.js 流量(温家锦操作)

    确认是否要执行刷数据脚本(刷全部用户数据,跟后端)

        gmdeploy release -u name ID         #将用户流量全部切换到分支服务上

        切换到master分支             meger到master
        git pull
        git merge 分支名称
        git push

        切换到develop分支                meger到develop分支
        git checkout develop
        git pull
        git merge master
        git push

    yes 确认完成操作

4. 刷数据(切流量前需要刷的脚本)
5. 修改 gm_task 脚本中的 group ids
6. 修改 gm_script 脚本中的 group ids
7. gmdeploy release
8. 刷数据(切流量后需要刷的脚本)
9. 通知前端全量更新代码               #发布全量操作
10. gmdeploy complete -u name ID        #等前端操作完成之后,软链接到模板工程里面
11. 到trello将模块拖到己全量看板


需求发布规范

每周一三五下午四点前合好代码,在 trello 中按照下面的模版填写发布单

需求发布单模版 V1

涉及Web后端工程

提供 Web 服务的工程的服务。这类工程都有 develop 分支,Reviewer 需要使用 GitLab 中把代码合到 develop 分支。

由于 Reviewer 一般事情比较繁忙,可能忘记了合代码。Developer 需要自行确定代码是否合并到了 develop 分支,由 Developer(而不是 Reviewer)对代码未合并造成的事故负责。

这里只需要写工程名,不需要填写分支。

涉及前端工程

提供前端工程的工程名。由前端对代码的合并负责。

修改到的功能

(包括但不限于:订单、支付、分拣、配送、采购、进销存、商品库)

刷数据脚本

刷数据脚本是在灰度以及全量的时候需要执行的脚本,用于批量修改数据。

每一个脚本需要提供以下信息:

  1. 脚本所在工程:
  2. 脚本的相对路径:
  3. 脚本的使用方式:
  4. 在切流量前还是切流量后运行脚本:
  5. 脚本是否可以重复刷某一个 Group:
  6. 其他注意事项

gm_task 改动

gm_task 里包含了所有 celey 的脚本

  1. 是否修改了 gm_task git 仓库中的代码或配置:
  2. gm_task 脚本类型(新增脚本/修改已有脚本):
  3. 脚本在 gm_task 中配置的名字:
  4. 脚本路径
  5. 如果是修改已有脚本,是否需要从全量的脚本中剔除灰度的客户

gm_script 改动

gm_script 中的脚本使用 crontab 定时调用

  1. 定时脚本类型(新增脚本/修改已有脚本):
  2. 如果是修改已有脚本,是否需要从全量的脚本中剔除灰度的客户:
  3. 如果是新增脚本,crontab 命令是什么:

其他需要执行的修改


例子:

## 需求发布单模版 V1

### 涉及Web后端工程

gm_service, gm_web_stock, gm_server_order

### 涉及前端工程

station, mes

### 修改到的功能

订单和支付

### 刷数据脚本

1. 脚本所在工程
        gm_service
2. 脚本的相对路径
        tools/tmp/abcdefg.py
3. 脚本的使用方式:
        python3 ./tools/tmp/abcdefg.py -g 111,222,333 # 刷部分groups
        python3 ./tools/tmp/abcdefg.py --all                  # 刷所有客户
4. 在切流量前还是切流量后运行脚本:切流量后执行
5. 脚本是否可以重复刷某一个 Group:可以
6. 其他注意事项:无

1. 脚本所在工程:order
2. 脚本的相对路径:tool/xyz.py
3. 脚本的使用方式:
        修改脚本文件中的 GROUP_IDS 变量,然后执行脚本。
4. 在切流量前还是切流量后运行脚本:都要
5. 脚本是否可以重复刷某一个 Group:可以
6. 其他注意事项:这个脚本  可能会运行数个小时,最好提前半天运行脚本。

### gm_task 改动

1. 是否修改了 gm_task git 仓库中的代码或配置:是
2. gm_task 脚本类型(新增脚本/修改已有脚本):新增脚本
3. 脚本在 gm_task 中配置的名字:export_purchase_analyse_path
4. 脚本路径:/data/www/stock/gm_web_stock/tools/celery_tasks/export_purchase_analyse.py
5. 如果是修改已有脚本,是否需要从全量的脚本中剔除灰度的客户:需要


1. 是否修改了 gm_task git 仓库中的代码或配置:否
2. gm_task 脚本类型(新增脚本/修改已有脚本):修改已有脚本
3. 脚本在 gm_task 中配置的名字:export_inner_transfer_log_path
4. 脚本路径:/data/www/stock/gm_web_stock/tools/celery_tasks/export_inner_transfer_log.py
5. 如果是修改已有脚本,是否需要从全量的脚本中剔除灰度的客户:需要


### gm_script 改动

无

### 其他需要执行的修改

1. 添加了新的日志目录,部署station和manage的机器上需有 /data/logs/celery_task/ 目录的存在. 否则station和manage会启动失败
2. 为了解决 gm_task 线程变量中没有group_id导致灰度请求无法准确通过rmiclient准确请求灰度接口的情况,
在gm_task中写死了 group_id为 909090, 必须灰度该id